﻿// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "UObject/Object.h"
#include "SynchronousLoading.generated.h"

/**	同步加载
 *	FObjectFinder / FClassFinder
 *		在构造函数加载
 * 			ConstructorHelpers::FObjectFinder
 * 			ConstructorHelpers::FClassFinder
 * 	LoadObject
 * 		一般用来加载资源对象
 * 	LoadClass
 * 		一般用来加载蓝图类, UClass*
 * 		蓝图类的路径末尾加上_C
 * 	TryLoad
 * 		配合 FSoftObjectPath 使用
 * 		TryLoad 中调用 LoadObject，加载时需要调用Cast转换一下
 * 	TryLoadClass
 * 		搭配 FSoftClassPath 使用
 * 		TryLoadClass 中调用了 LoadClass
 * 	FStreamableManager::LoadSynchronous
 * 		FStreamableManager::内部调用 RequestSyncLoad
 * 		参数中返回一个FStreamableHandle类型的指针
 * 		可加载非蓝图资源类
 * 			配合FStreamableManager、FSoftObjectPath 使用
 * 			配合FStreamableManager、TSoftObjectPtr使用
 * 		也可加载蓝图类为 UClass*
 * 			配合FStreamableManager、TSoftObjectPtr使用
 * 			配合FStreamableManager、TSoftClassPtr使用
 * 	FStreamableManager::RequestSyncLoad
 * 		配合 FStreamableManager、FSoftObjectPath 使用
 * 		返回一个FStreamableHandle类型的指针
 * 		TSharedPtr 通过 GetLoadedAsset() 获取单个资源
 * 		TSharedPtr 通过 GetLoadedAssets() 获取多个资源
 */
UCLASS()
class MISCELLANEOUSPROJECT_API USynchronousLoading : public UObject
{
	GENERATED_BODY()
public:
	void LoadObjectMethod();
	void LoadClassMethod();
	void TryLoadMethod();
	void TryLoadClassMethod();
	void LoadSynchronousMethod();
	void RequestSyncLoadMethod();
};
